From 05d9e0c1c8125742e074ba415269adeaa7ea03e3 Mon Sep 17 00:00:00 2001 From: Emmanuele Bassi Date: Mon, 27 Jul 2020 13:53:05 +0100 Subject: [PATCH] a11y: Allow unsetting the relations using NULL Accessible values storing references and reference lists can be unset by using NULL to mean "undefined"; since we cannot return the NULL value, we need to intercept it when collecting a value, and replace it with an undefined GtkAccessibleValue, which is also the value used as the default for GtkAccessibleRelation values that store a reference or a reference list. Fixes: #2955 --- gtk/gtkaccessiblevalue.c | 32 ++++++++++++++++++++++++++------ 1 file changed, 26 insertions(+), 6 deletions(-) diff --git a/gtk/gtkaccessiblevalue.c b/gtk/gtkaccessiblevalue.c index 21d9ae741a..081bbf700a 100644 --- a/gtk/gtkaccessiblevalue.c +++ b/gtk/gtkaccessiblevalue.c @@ -1047,10 +1047,20 @@ gtk_accessible_value_collect_valist (const GtkAccessibleCollect *cstate, gpointer value = va_arg (*args, gpointer); - if (ctor == NULL) - res = gtk_reference_accessible_value_new (value); + if (value == NULL) + { + if (ctor == NULL) + res = gtk_undefined_accessible_value_new (); + else + res = (* ctor) (value); + } else - res = (* ctor) (value); + { + if (ctor == NULL) + res = gtk_reference_accessible_value_new (value); + else + res = (* ctor) (value); + } } break; @@ -1061,10 +1071,20 @@ gtk_accessible_value_collect_valist (const GtkAccessibleCollect *cstate, GList *value = va_arg (*args, gpointer); - if (ctor == NULL) - res = gtk_reference_list_accessible_value_new (value); + if (value == NULL) + { + if (ctor == NULL) + res = gtk_undefined_accessible_value_new (); + else + res = (* ctor) (value); + } else - res = (* ctor) (value); + { + if (ctor == NULL) + res = gtk_reference_list_accessible_value_new (value); + else + res = (* ctor) (value); + } } break; -- 2.30.2